package com.probox.common.entity.service.order;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.probox.common.core.enums.CartIsShowEnum;
import com.probox.order.api.domain.OrderShopCartVo;
import com.probox.common.entity.domain.order.OrderShopCart;
import com.probox.common.entity.domain.order.vo.ShopCartVo;

/**
 * 购物车明细Service接口
 *
 * @author hds
 * @date 2021-05-28
 */
public interface IOrderShopCartService extends IService<OrderShopCart> {


    /**
     * 查询购物车明细
     *
     * @param cartUid 购物车明细ID
     * @return 购物车明细
     */
    public OrderShopCart selectOrderShopCartById(Long cartUid);


    /**
     * 查询购物车明细列表
     *
     * @param orderShopCart 购物车明细
     * @return 购物车明细集合
     */
    public List<OrderShopCart> queryList(OrderShopCart orderShopCart);


    /**
     * 新增购物车明细
     *
     * @param orderShopCart 购物车明细
     * @return 结果
     */
    public boolean insertOrderShopCart(OrderShopCart orderShopCart);

    /**
     * 修改购物车明细
     *
     * @param orderShopCart 购物车明细
     * @return 结果
     */
    public boolean updateOrderShopCart(OrderShopCart orderShopCart);

    /**
     * 批量删除购物车明细
     *
     * @param cartUids 需要删除的购物车明细ID
     * @return 结果
     */
    public boolean deleteOrderShopCartByIds(Long[] cartUids);

    /**
     * 将购物车设置为已结算
     *
     * @param cartUids
     * @return
     */
    public boolean updateShopCartToSettled(List<Long> cartUids);


    /**
     * 购物车列表
     *
     * @return
     */
    public List<OrderShopCart> listByStoreId(Long storeId);

    /**
     * 购物车数量
     *
     * @return
     */
    public int cartCount(Long storeId);

    /**
     * 查询指定的购物车数据
     *
     * @param shopCartVo
     * @return
     */
    public List<OrderShopCart> list(ShopCartVo shopCartVo);

    /**
     * 添加购物车
     *
     * @param shopCartVo
     * @return
     */
    public ShopCartVo add(ShopCartVo shopCartVo, CartIsShowEnum showEnum);

    /**
     * 修改商品购买数量
     *
     * @param shopCartVo
     * @return
     */
    public ShopCartVo updateNumber(ShopCartVo shopCartVo);

    /**
     * 修改商品SKU信息
     *
     * @param shopCartVo
     * @return
     */
    public ShopCartVo updateSku(ShopCartVo shopCartVo);

    /**
     * 删除购物车
     *
     * @param shopCartVo
     * @return
     */
    public int delete(ShopCartVo shopCartVo);

    /**
     * 立即购买
     *
     * @param shopCartVo
     * @return
     */
    public ShopCartVo buy(ShopCartVo shopCartVo);

    public ShopCartVo buyDdl(ShopCartVo shopCartVo);

    /**
     * 购买优惠券
     * @param shopCartVo
     * @return
     */
    public ShopCartVo buyCoupon(ShopCartVo shopCartVo);


    OrderShopCartVo getCart(Long carUids);

    List<OrderShopCart> getCartList(List<Long> carUids);
}
